package cn.com.gzheroli.core.common.service;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import cn.com.gzheroli.bfw.pojo.base.DuplicateCheckPage;
import cn.com.gzheroli.bfw.pojo.base.TSFunction;
import cn.com.gzheroli.bfw.pojo.base.TSType;
import cn.com.gzheroli.bfw.pojo.base.TSTypegroup;
import cn.com.gzheroli.bfw.pojo.base.TSUser;
import cn.com.gzheroli.core.common.model.common.UploadFile;
import cn.com.gzheroli.core.common.model.json.DataGridReturn;
import cn.com.gzheroli.core.common.model.json.ImportFile;
import cn.com.gzheroli.core.common.model.json.TreeGrid;
import cn.com.gzheroli.tag.vo.easyui.Autocomplete;
import cn.com.gzheroli.tag.vo.easyui.TreeGridModel;


public interface SystemService {
	/**
	 * 登陆用户检查
	 * @param user
	 * @return
	 * @throws Exception
	 */
	/*public TSUser checkUserExits(TSUser user) throws Exception;*/
	
	/**
	 * 根据类型编码和类型名称获取Type,如果为空则创建一个
	 * @param typecode
	 * @param typename
	 * @return
	 */
	public TSType getType(String typecode,String typename,String typeGroupId);
	/**
	 * 根据类型分组编码和名称获取TypeGroup,如果为空则创建一个
	 * @param typecode
	 * @param typename
	 * @return
	 */
	public TSTypegroup getTypeGroup(String typeGroupCode,String typeGroupName);
	/**
	 * 根据用户ID 和 菜单Id 获取 具有操作权限的按钮Codes
	 * @param roleId
	 * @param functionId
	 * @return
	 */
	public  Set<String> getOperationCodesByUserIdAndFunctionId(String userId,String functionId);
	/**
	 * 根据角色ID 和 菜单Id 获取 具有操作权限的按钮Codes
	 * @param roleId
	 * @param functionId
	 * @return
	 */
	public  Set<String> getOperationCodesByRoleIdAndFunctionId(String roleId,String functionId);
	/**
	 * 根据编码获取字典组
	 * 
	 * @param typegroupCode
	 * @return
	 */
	public TSTypegroup getTypeGroupByCode(String typegroupCode);
	/**
	 * 对数据字典进行缓存
	 */
	public void getInitAllTypeGroups(String typeGroupId);
	
	/**
	 * 刷新字典缓存
	 * @param type
	 */
	public void refleshTypesCach(TSType type);
	/**
	 * 刷新字典分组缓存
	 */
	public void refleshTypeGroupCach(String typeGroupId);
	/**
	 * 根据菜单url 获取 操作功能id
	 * @param functionUrl
	 * @return
	 */
	public String getFunctionIdByFunctionUrl(String functionUrl);
	/**
	 * 校验数据是否在系统中是否存在
	 * @return
	 */
	public Long doDuplicateCheck(DuplicateCheckPage duplicateCheckPage);
	

	
	/**
	 * 文件上传
	 * 
	 * @param request
	 */
	public <T> T uploadFile(UploadFile uploadFile);
	public HttpServletResponse viewOrDownloadFile(UploadFile uploadFile);
	
	/**
	 * 生成XML文件
	 * 
	 * @param fileName
	 *            XML全路径
	 */
	public HttpServletResponse createXml(ImportFile importFile);

	/**
	 * 解析XML文件
	 * 
	 * @param fileName
	 *            XML全路径
	 */
	public void parserXml(String fileName);
	
	/**
     * 从session中获取用户对象，没有的话，用getUserName()获取用户对象存入session
     * @param req request
     * @param TSUser 当前登录账号
     */
    public TSUser getUserFromSeesion(TSUser user);
    

	/**
	 * 
	* @Title: initAllTypeGroups  
	* @Description: 初始化数据字典到缓存
	* @param     参数  
	* @return void    返回类型  
	* @throws
	 */
	public void initAllTypeGroups();
	public String getTableColumn(String tableName,String fieldName,Class clazz);
	public void getInitAllTables(String tableName);
	/**
	 * 
	* @Title: getAllTables 
	* @Description: 加载所有表名到缓存
	* @param @param tableName    设定文件 
	* @return List<String>    返回类型 
	* @throws
	 */
	public List<String> getAllTables(String tableName);
	public Map<String, Object> getHeroTableColumns(String tableName, Class obj);
}
